package com.wjh.www.service;

import com.wjh.www.annotation.Transaction;
import com.wjh.www.entity.bo.StudentCourseBo;
import com.wjh.www.entity.dto.CommonResult;
import com.wjh.www.entity.po.Course;
import com.wjh.www.entity.vo.ExcelVo;

import java.util.List;

/**
 * @author wjh
 * @date 2021/9/10 13:59
 * @Package com.wjh.anyview.service
 */
public interface CourseService {
    /**
     * 添加一门课程
     *
     * @param course 封装的课程对象
     * @return 没有数据返回
     */
    CommonResult<?> addCourse(Course course);

    /**
     * 修改一门课程的信息
     *
     * @param course 封装的课程对象
     * @return 没有数据返回
     */
    CommonResult<?> updateCourseById(Course course);

    /**
     * 通过课程id删除一门课程
     *
     * @param courseId 课程id
     * @return 没有数据返回
     */
    CommonResult<?> deleteCourseById(Long courseId);

    /**
     * 通过年级来查询该年级可选的课程
     *
     * @param grade 年级
     * @return 返回List<Course>
     */
    CommonResult<List<Course>> queryCourseByGrade(Integer grade);

    /**
     * 抢课
     *
     * @param studentCourseBo 封装学生id和课程id的类
     * @return 没有数据返回
     */
    @Transaction
    CommonResult<?> choiceCourse(StudentCourseBo studentCourseBo);

    /**
     * 通过学生的id查询学生预选的课程
     *
     * @param studentId 学生id
     * @return 返回预选课程的集合
     */
    CommonResult<List<Course>> queryPreCourseByStudentId(Long studentId);

    /**
     * 学生确选某一门课程
     *
     * @param studentCourseBo 封装学生id和课程id的类
     * @return 没有数据返回
     */
    CommonResult<?> affirmCourse(StudentCourseBo studentCourseBo);

    /**
     * 学生取消选择某一门预选课程
     *
     * @param studentCourseBo 封装学生id和课程id的类
     * @return 没有数据返回
     */
    CommonResult<?> cancelCourse(StudentCourseBo studentCourseBo);

    /**
     * 查询学生已经选择的课程
     *
     * @param studentId 学生id
     * @return 返回excel表格及其名称
     */
    CommonResult<ExcelVo> listCourseInExcel(Long studentId);

    /**
     * 查询所有课程
     *
     * @return 返回预选课程的集合
     */
    CommonResult<List<Course>> queryAllCourse();
}
